package demo.thread;

/**
 * Timer有两个定时执行任务的方法：
 * scheduleAtFixedRate：优先保证下一次时间的精确性。如果第一次执行时间被delay了，随后的执行时间按照 上一次开始的 时间点 进行计算
 * schedule：优先保证间隔的精确性。如果第一次执行时间被delay了，随后的执行时间按照 上一次 实际执行完成的时间点 进行计算
 * 
 * 比如本身是0 3 6 9，如果调度耽搁了2秒钟：
 * scheduleAtFixedRate 是0 3+2 6 9
 * schedule 0 3+2 8 11
 */
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerDemo {
	public static void main(String[] args) {
		final Timer timer = new Timer();//Timer理解为定时器
		//通过该方法执行定时任务(间隔为1秒钟)
		timer.scheduleAtFixedRate(new TimerTask() {	//TimerTask理解为需要反复执行的任务
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println(formateDate(new Date()));
			}
			
			public String formateDate(Date date){
				String strDate = null;
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				strDate = sdf.format(date);
				return strDate;
			}
		}, 0, 1000);
		
		Calendar c = Calendar.getInstance();
		c.add(Calendar.SECOND, 10);//设置c实例的时间为1分钟后
		
		//通过该方法执行延时任务，3秒钟后执行。一个timer可以安排多个task
		timer.schedule(new TimerTask() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println("这个task 3秒钟后会执行");
				timer.cancel();
			}
		}, c.getTime());
	}
}
